package br.com.mtech.ctrlliberty.clientjar.entity;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="tbMensagem")
@SequenceGenerator(name="sqMensagem", sequenceName="sqMensagem", allocationSize=10)
public class MensagemVO implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Id
	@Column(name="idMensagem")
	@GeneratedValue(generator="sqMensagem", strategy=GenerationType.SEQUENCE)
	private Long id;
	
	@Column(name="nuDddRemoto")
	private String numeroDDDRemoto;
	
	@Column(name="nuRemoto")
	private Long numeroRemoto;
		
	@Column(name="dsMensagem")
	private String mensagem;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name="dtMensagem")
	private Date dataMensagem;
	
	@Enumerated
	@Column(name="idTipoMensagem")
	private TipoLigacaoEnum tipoLigacao;
	
	@OneToOne(fetch=FetchType.EAGER, cascade={CascadeType.ALL})
	@JoinColumn(name="idCoordenada")
	private CoordenadaGPSVO coordenada;
	
	@ManyToOne
	@JoinColumn(name="idTelefone")
	private TelefoneVO telefone;
	
	public MensagemVO() {
		
	}

	public MensagemVO(String numeroDDDRemoto, Long numeroRemoto,
			String mensagem, Date dataMensagem, TipoLigacaoEnum tipoLigacao,
			CoordenadaGPSVO coordenada, TelefoneVO telefone) {
		super();
		this.numeroDDDRemoto = numeroDDDRemoto;
		this.numeroRemoto = numeroRemoto;
		this.mensagem = mensagem;
		this.dataMensagem = dataMensagem;
		this.tipoLigacao = tipoLigacao;
		this.coordenada = coordenada;
		this.telefone = telefone;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNumeroDDDRemoto() {
		return numeroDDDRemoto;
	}

	public void setNumeroDDDRemoto(String numeroDDDRemoto) {
		this.numeroDDDRemoto = numeroDDDRemoto;
	}

	public Long getNumeroRemoto() {
		return numeroRemoto;
	}

	public void setNumeroRemoto(Long numeroRemoto) {
		this.numeroRemoto = numeroRemoto;
	}
	
	public String getNumeroRemotoFormatado() {
		String numeroFormatado = Long.toString(numeroRemoto);
		return numeroFormatado.substring(0,4) + "-" + numeroFormatado.substring(4);
	}


	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public Date getDataMensagem() {
		return dataMensagem;
	}

	public void setDataMensagem(Date dataMensagem) {
		this.dataMensagem = dataMensagem;
	}

	public TipoLigacaoEnum getTipoLigacao() {
		return tipoLigacao;
	}

	public void setTipoLigacao(TipoLigacaoEnum tipoLigacao) {
		this.tipoLigacao = tipoLigacao;
	}

	public CoordenadaGPSVO getCoordenada() {
		return coordenada;
	}

	public void setCoordenada(CoordenadaGPSVO coordenada) {
		this.coordenada = coordenada;
	}

	public TelefoneVO getTelefone() {
		return telefone;
	}

	public void setTelefone(TelefoneVO telefone) {
		this.telefone = telefone;
	}
	
	public DiaDaSemanaEnum getDiaMensagem() {
		Calendar cal = Calendar.getInstance();
		cal.setTime(getDataMensagem());
		return DiaDaSemanaEnum.getInstance(cal.get(Calendar.DAY_OF_WEEK));
	}
	
}
